//package leetcode;
//
//import java.util.Map;
//
//class TreeNode {
//    int val;
//    TreeNode left;
//    TreeNode right;
//
//    public TreeNode() {
//    }
//
//    public TreeNode(int val) {
//        this.val = val;
//    }
//
//    public TreeNode(int val, TreeNode left, TreeNode right) {
//        this.val = val;
//        this.left = left;
//        this.right = right;
//    }
//}
//
//class Solution {
//    private Map<Integer,Integer> map;
//
//    public TreeNode buildTree(int[] preorder, int[] inorder) {
//        int n = inorder.length;
//        for(int i=0;i<inorder.length;i++){
//            map.put(inorder[i],i);
//        }
//        return myBuildTree(preorder,inorder,0,n-1,0,n-1);
//    }
//
//    private TreeNode myBuildTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
//        if(preorder_left > preorder_right){
//            return null;
//        }
//        int preorder_root = preorder_left;
//
//        int inorder_root = map.get(preorder[preorder_root]);
//
//        TreeNode root = new TreeNode(preorder[preorder_root]);
//
//        int left_tree_size  = inorder_root - inorder_left;
//
//        root.left = myBuildTree(preorder,inorder,preorder_left+1,preorder_left+left_tree_size,inorder_left,inorder_root-1);
//        root.right = myBuildTree(preorder,inorder,preorder_left+left_tree_size+1,preorder_right,inorder_root+1,inorder_right);
//        return root;
//    }
//}
//
//public class Test1S {
//}
